#!/usr/bin/env node

// Node CLI应用入口文件必须要有这样的文件头

// 脚手架的工作过程：
// 1.通过命令行交互询问用户问题
// 2.根据用户回答的结果生成文件

/**
 * 实现过程
 * 1.yarn init -y
 * 2.yarn
 * 3.package.json新增bin字段，并指定cli应用的入口的文件cli.js
 * 4.yarn link把当前模块link到全局，这时候在全局命令行运行code-cli就可以执行这个cli.js
 * 
 */


const inquirer = require('inquirer')
const fs = require('fs')
const path = require('path')
const ejs = require('ejs')

inquirer.prompt([
  {
    type: 'input',
    name: 'name',
    message: 'Project name?'
  },
  {
    type: 'list',
    name: 'teacher',
    message: 'What is your favourate teacher?',
    choices: ['圈圈', '小北', '行痴']
  },
])
.then(anwsers => {
  // console.log(anwsers);
  // 根据用户回答的结果生成文件

  // 模板目录(__dirname指的是这个程序的环境路径)
  const tmpDir = path.join(__dirname, 'templates')
  // 目标目录(process.cwd指的是当前执行环境的路径)
  const destDir = process.cwd()
  // 将模板下的文件全部转换到目标目录
  fs.readdir(tmpDir, (err, files)=> {
    if(err) throw err
    files.forEach(file => {
      // 通过模板引擎渲染文件
      ejs.renderFile(path.join(tmpDir, file), anwsers, (err, result)=> {
        if(err) throw err
        // 将结果写入目标文件目录
        fs.writeFileSync(path.join(destDir, file), result)
      })
    })
  })
})
